iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Modern Web

Rust 新手村系列 第 13

Rust-枚舉(enumeration)

  • 分享至 

  • xImage
  •  

枚舉就是列出有窮序列的型別

透過enum關鍵字新增了新的Browser型別在範例中列出了一個組項分別為

Firefox,Chrome,IE,Safari內部值分別為0u8,1u8,2u8,3u8表示

通常都是以整數為內部關聯值

透過枚舉寫以下的代碼

enum Browser {
    Firefox,
    Chrome,
    Ie,
    Safari,
}

let browser = Browser::Ie;

match browser {
    Browser::Firefox => println!("F"),
    Browser::Chrome => println!("C"),
    Browser::Ie => println!("I"),
    Browser::Safari => println!("S"),
}

不要編寫這樣的代碼

const FIREFOX: u8 = 0;
const CHROME: u8 = 1;
const IE: u8 = 2;
const SAFARI: u8 = 3;

let browser = IE;

if browser == FIREFOX {
    println!("F");
} else if browser == CHROME {
    println!("C");
} else if browser == IE {
    println!("I");
} else if browser == SAFARI {
    println!("S");
}

再怎樣也不要寫magic number

如何使用枚舉

使用Use的方式

// 顯式的指定要使用的枚舉
use Browser::{Chrome, Firefox, Ie, Safari};

let browser = Ie;

match browser {
    Firefox => println!("F"),
    Chrome => println!("C"),
    Ie => println!("I"),
    Safari => println!("S"),
}

// 自動的使用Browser內部所有的枚舉
use Browser::*;

let browser = Ie;

match browser {
    Firefox => println!("F"),
    Chrome => println!("C"),
    Ie => println!("I"),
    Safari => println!("S"),
}

使用帶有C風格的用法

enum Browser {
    Firefox,
    Chrome,
    Ie,
    Safari,
}

println!("{}", Browser::Firefox as i32)

枚舉不能使用"=="運算子做比較

let browser = Browser::Ie;

if browser == Browser::Ie {
    println!("{}", "hello word")
}

// 編譯時會出錯
// binary operation `==` cannot be applied to type `Browser`

上一篇
Rust-流程控制-for
下一篇
Rust-Match控制流運算子
系列文
Rust 新手村30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言